考慮小數點二分搜,我們去二分搜到剛好有
至於如何檢查,對於一個固定的分母
答案是
具體實作類似篩法,如下
int dp[N];bool check(double x) { for (int i = 1; i <= n; i++) { dp[i] = 0; } int sum = 0; for (int j = 2; j <= n; j++) { dp[i] += x * j; for (int i = j + j; i <= n; i += j) { dp[i] -= dp[j]; } sum += dp[j]; } return sum >= k;}最後,要輸出分數答案時,找比
另一種想法也類似,我們觀察到,Farey 序列裡面相鄰兩項的差大於

所以我們可以去二分搜
也一樣用類篩法實作,最後要輸出答案時,找